#include <iostream>

inline int const max(int const a, int const b)
{
    return a < b ? b : a;
}

template <typename T>
inline T const max(T const a, T const b)
{
    return a < b ? b : a;
}

template <typename T>
inline T const max(T const a, T const b, T const c)
{
    return ::max(::max(a, b), c);
}

int main()
{
    std::cout<<::max(7, 423, 376)<<'\n';
    std::cout<<::max(7.0, 42.0)<<'\n';
    std::cout<<::max('a', 'b')<<'\n';
    std::cout<<::max(7, 42)<<'\n';
    std::cout<<::max<>(7, 42)<<'\n';
    std::cout<<::max<double>(7, 42)<<'\n';
    std::cout<<::max('a', 42.7)<<'\n';
}
